package com.gz.controller;

import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.gz.common.UserService;
import com.gz.common.model.Role;
import com.gz.common.model.User;
import com.gz.utils.Response;
import com.gz.utils.SendSMSUtil;
import com.jfinal.core.Controller;
import com.jfinal.kit.StrKit;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.cache.IAccessTokenCache;

/**
 * 用户模块Controller 含注册登录
 * 
 * @author 86177
 *
 */
public class UsersController extends Controller {

	/**
	 * @author ZhangZhanyi Description:判断openid是否存在（判断用户是否登录）
	 * @param openid 微信授权登录的openid
	 * @return user （openID存在就返回user信息）
	 * @return 存在返回1000 不存在返回1001 http://localhost:8080/cms-api/users/findopenId
	 */
	public void findopenId() {
		String openid = getPara("openid");
		List<User> user = UserService.getService().getUserByOpenId(openid);
		// 判断user是否为null null表示哦openid不存在
		if (user != null) {
			if (user.size() == 1) {
				renderJson(Response.responseJson(1000, "用户存在", user.get(0)));
			} else {
				renderJson(Response.responseJson(1002, "多个同openid用户存在"));
			}
		} else {
			renderJson(Response.responseJson(1001, "用户不存在"));
		}
	}

	/**
	 * @author ZhangZhanyi Description:登录按钮单击事件 实现登陆 微信openid跟数据库user信息做绑定
	 * @param mobile   电话号码
	 * @param password 密码
	 * @param openid   微信授权登录的openid
	 * @return 修改成功返回1000 用户不存在返回1001
	 *         http://localhost:8080/cms-api/users/findUserByMobileAndPwd
	 */
	public void findUserByMobileAndPwd() {
		String mobile = getPara("mobile");
		String password = getPara("password");
		String openid = getPara("openid");
		User user = UserService.getService().getUserByMobileandPWD(mobile, password);
		// 判断用户登录是否成功 user=null 则登录失败
		if (user != null) {
			user.setOpenId(openid);
//			================================================
			user.setLogged(new Date());
			if(user.getTokenExpiretime()==null) {
				UserService.getService().createToken(user);
			}
			else if (user.getTokenExpiretime().getTime() < new Date().getTime()) {
				UserService.getService().createToken(user);
			}
			user.update();
			int line = UserService.getService().cleanOpenIdExcept(openid, user.getId());
			System.out.println(line + "line influenced(on updating repeat openid)");
//			================================================
			renderJson(Response.responseJson(1000, "修改成功"));
		} else {
			renderJson(Response.responseJson(1001, "用户不存在"));
		}
	}

	/**
	 * @author ZhangZhanyi Description:注册时键盘输入事件 判断手机号码是否注册过
	 * @param mobile 手机号码
	 * @return 号码存在返回1002 号码不存在返回1003 http://localhost:8080/cms-api/users/findmobile
	 */
	public void findmobile() {
		String mobile = getPara("mobile");
		User user = UserService.getService().getUserByUserMobile(mobile);

		// 判断手机号码是否存在 user=null 表示该手机号码没被注册
		if (user != null) {
			renderJson(Response.responseJson(1002, "号码存在"));
		} else {
			renderJson(Response.responseJson(1003, "号码不存在"));
		}
	}

	/**
	 * @author ZhangZhanyi Description: 注册按钮事件 实现新增用户信息
	 * @param mobile   手机号码
	 * @param name     用户名称
	 * @param password 用户密码
	 * @param roleId   用户角色id 默认为3
	 * @return 新增成功返回1004 新增失败返回1005 http://localhost:8080/cms-api/users/addUser
	 */
	public void addUser() {
		String mobile = getPara("mobile");
		String username = getPara("name");
		String password = getPara("password");
		// int roleId = getParaToInt("roleId");
		// 保存实体类新增到user表
		User user = new User();
		user.setMobile(mobile);
		user.setUsername(username);
		user.setPassword(password);
//    	========================================
//        Role role=UserService.getService().getRole("wechat");
//        if(role==null){
//            role.setName("wechat");
//            role.setName("微信用户");
//            role.save();
//        }
//        user.setRoleId(role.getId());
		user.setCreated(new Date());
		user.setActivated(new Date());
		user.setSalt(UserService.getService().createSalt());
		UserService.getService().createToken(user);
//    	========================================
		user.setRoleId(3);
		boolean a = UserService.getService().addUser(user);
		// 判断新增是否成功
		if (a) {
			renderJson(Response.responseJson(1004, "新增成功"));
		} else {
			renderJson(Response.responseJson(1005, "新增失败"));
		}
	}

	/**
	 * @author ZhangZhanyi Description: 根据手机号码查询到对象然后修改密码
	 * @param mobile   手机号码
	 * @param password 用户密码
	 * @return 修改成功返回1100 http://localhost:8080/cms-api/users/findByMobilMvPwd
	 */
	public void findByMobilMvPwd() {
		String mobile = getPara("mobile");
		String password = getPara("password");
		// 得到user 如果user存在则修改密码
		User user = UserService.getService().getUserByUserMobile(mobile);
		if (user != null) {
			user.setPassword(password);
			UserService.getService().updateUser(user);
			renderJson(Response.responseJson(1000, "修改成功"));
		} else {
			renderJson(Response.responseJson(1001, "用户不存在"));
		}
	}

	/**
	 * @author ZhangZhanyi 后台给微信请求发出验证码
	 * @param mobile 用户电话号码
	 * @return 返回code验证码 http://localhost/cms-api/users/IdentifyingCode
	 */
	public void IdentifyingCode() {
		String mobile = getPara("mobile");
		// 短信验证码工具类
		SendSMSUtil ss = new SendSMSUtil();
		// 生产随机数
		String code = ss.getCode();
		// 验证码提示
		String content = ss.getContent(code);
		// 返回验证码
		ss.sendSMS(mobile, content);
		renderJson(Response.responseJson(0, content, code));
	}

	public void updateAvatar() {
		String openid = getPara("oid");
		JSONObject userInfoJson = JSONObject.parseObject(getPara("userInfo"));
		if (openid != null && !openid.isEmpty()) {
			List<User> users = UserService.getService().getUserByOpenId(openid);
			if (users.size() == 1) {
				User user = users.get(0);
				user.setNickname(userInfoJson.getString("nickName"));
				user.setGender(userInfoJson.getString("gender"));
				user.setAvatar(userInfoJson.getString("avatarUrl"));
				user.update();
				renderJson(Response.responseJson(1002, "更新头像成功"));
			} else {
				renderJson(Response.responseJson(1001, "更新头像失败:openid对应用户不存在或不唯一"));
			}
		} else {
			renderJson(Response.responseJson(1000, "更新头像失败:openid为空"));
		}
	}

}
